/*
 * Almacenamiento.h
 *
 *  Created on: 06/10/2009
 *      Author: hernan
 */

#ifndef ALMACENAMIENTO_H_
#define ALMACENAMIENTO_H_

#include <fstream>
#include <iostream>
#include "../Externa/Dato.h"
#include "../Externa/Clave.h"
#include <list>



using namespace std;

class Almacenamiento:  public fstream {

	public: Almacenamiento();

	public: virtual ~Almacenamiento();

	/**
	 * Metodo que salva en buffer o disco (metodo virtual) y devuelve en que lugar de dicha
	 * estructura se guardo la informacion
	 */
	public: virtual int saveData(Dato *data);

	public: virtual int saveData(string data, int posicion);

	public: virtual int saveData(string data);

	/**
	 * Metodo que borra de la estructura (Buffer o Archivo) el daisEoSto alojado en la posicion
	 * indicada por el parametro position
	 */
	public: virtual void deleteData(int position);


	/**
	 * Metodo que actualiza los datos alojados en la posicion pasada por parametro
	 * con los datos del parametro data
	 */
	public: virtual void updateData(int position,Dato *data);


	/**
	 * Metodo que actualiza los datos alojados en la posicion pasada por parametro
	 * con los datos del parametro data
	 */
	public: virtual void updateData(int position,string data);


	/**
	 * Metodo que, previamente consultando al indice sobre un dato y devolviendo este una posicion al archivo * buffer, devuelve
	 * el dato en cuestion.
	 */
	public: virtual string getData(int position);


	public: virtual string getData();

	/*
	 * Metodo que vacia el buffer (liberando memoria) o el archivo (abriendolo para escritura borrando todo contenido anterior)
	 *
	 *
	 */
	public: virtual void clean();

	/*
	 * Metodo que Lee la posicion "pos" del archivo o el buffer
	 *
	 *
	 */
	public: virtual string Read(int pos);


	   //Funcion que ingresa al final de la lista de buffer la cadena ingresada por parametro
	   //O graba al final de un archivo de texto

	public: virtual int Write(string& cadena);


	   //Funcion que elimina la posicion "pos" de la lista del buffer / archivo

	public: virtual int Delete(int pos);


	//Funcion que devuelve la cantidad de lineas en un archivo de texto o la cantidad de elementos en el buffer

	public: virtual int GetTamanio();

	public: virtual void SetPosicion(long int pos);

	/* Is End Of Storage */
	public: virtual bool isEoS();

	public: virtual void firstPosition();

	/**
	 * Borra el registro indicado por el parametro
	 */
	public: virtual void deleteCurrent(int position);

	public: virtual int getPosition();

	public: virtual void Limpiar();

	public: virtual void markPersisted(int position);

	public: virtual int getOldData();


};

#endif /* ALMACENAMIENTO_H_ */
